home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume2 / xfig / patch6 < prev    next >
Encoding:
Text File  |  1988-12-02  |  28.7 KB  |  1,200 lines

  1. Path: uunet!wyse!mikew
  2. From: mikew@wyse.wyse.com (Mike Wexler)
  3. Newsgroups: comp.sources.x
  4. Subject: v02i026:  a MacDraw like graphics editor, Patch 5
  5. Message-ID: <1870@wyse.wyse.com>
  6. Date: 2 Dec 88 18:15:58 GMT
  7. Organization: Wyse Technology, San Jose
  8. Lines: 1189
  9. Approved: mikew@wyse.com
  10.  
  11. Submitted-by: dana@thumper.bellcore.com (Dana A. Chee)
  12. Posting-number: Volume 2, Issue 26
  13. Archive-name: xfig/patch6
  14.  
  15. [The archive xfig/patch5 is really patch 4. Sorry for any confusion. -mcw]
  16.  
  17.  
  18.  
  19. Below is the second patch to the R3 distribution of xfig.  This brings
  20. things up to patchlevel 5
  21.  
  22.             Dana Chee
  23.             Bellcore
  24.             MRE 2Q-250
  25.             (201) 829-4488
  26.             dana@bellcore.com
  27. --------------------
  28. Second patch for the R3 distribution of xfig.
  29.  
  30. Dana Chee, Bellcore, dana@thumper.bellcore.com
  31.  
  32.     * This is patchlevel 5
  33.     * addpt.c - fixed manhattan mode so that adding a point to either
  34.       end would follow the convention
  35.     * arc.c - fixed problem with ending arcs
  36.     * const.h - added defines for metric rulers
  37.     * f2p.c - fixed problems with interpolated splines and arrows
  38.     * f2ps.c - fixed problems with interpolated splines and arrows
  39.     * global.c - added variables for metric rulers
  40.     * grid.c - added metric grids
  41.     * intspline.c - fixed problems with interpolated splines and arrows
  42.     * line.c - fixed problem with last segment of polyline not
  43.       following manhattan convention
  44.     * main.c - added patchlevel to startup line and added options for
  45.       metric ruler.
  46.     * ruler.c - added metric rulers
  47.     * xfig.1 - added info on ruler units
  48.  
  49.  
  50. *** /tmp/d16280    Thu Dec  1 11:43:36 1988
  51. --- patchlevel.h    Wed Nov 30 09:51:10 1988
  52. ***************
  53. *** 1
  54. ! #define PATCHLEVEL 4
  55.  
  56. --- 1 -----
  57. ! #define PATCHLEVEL 5
  58.  
  59. *** /tmp/d16283    Thu Dec  1 11:43:37 1988
  60. --- addpt.c    Tue Nov 29 16:12:23 1988
  61. ***************
  62. *** 26,31
  63.   extern            (*canvas_rightbut_proc)();
  64.   extern            null_proc();
  65.   extern            set_popupmenu();
  66.   
  67.   extern int        cur_x, cur_y;
  68.   extern int        pointmarker_shown;
  69.  
  70. --- 26,32 -----
  71.   extern            (*canvas_rightbut_proc)();
  72.   extern            null_proc();
  73.   extern            set_popupmenu();
  74. + extern            determine_angle();
  75.   
  76.   extern int        manhattan_mode, mountain_mode;
  77.   extern int        latexline_mode, latexarrow_mode;
  78. ***************
  79. *** 27,33
  80.   extern            null_proc();
  81.   extern            set_popupmenu();
  82.   
  83. ! extern int        cur_x, cur_y;
  84.   extern int        pointmarker_shown;
  85.   extern F_line        *line;
  86.   extern F_spline        *spline;
  87.  
  88. --- 28,36 -----
  89.   extern            set_popupmenu();
  90.   extern            determine_angle();
  91.   
  92. ! extern int        manhattan_mode, mountain_mode;
  93. ! extern int        latexline_mode, latexarrow_mode;
  94. ! extern int        cur_x, cur_y, fix_x, fix_y;
  95.   extern int        pointmarker_shown;
  96.   extern F_line        *line;
  97.   extern F_spline        *spline;
  98. ***************
  99. *** 38,43
  100.               init_point_adding();
  101.               move_addedpoint();
  102.               fix_linepoint_adding();
  103.               fix_splinepoint_adding();
  104.   
  105.   static F_line        *cur_line;
  106.  
  107. --- 41,47 -----
  108.               init_point_adding();
  109.               move_addedpoint();
  110.               fix_linepoint_adding();
  111. +             mm_fix_linepoint_adding();
  112.               fix_splinepoint_adding();
  113.               latex_elasticline();
  114.   
  115. ***************
  116. *** 39,44
  117.               move_addedpoint();
  118.               fix_linepoint_adding();
  119.               fix_splinepoint_adding();
  120.   
  121.   static F_line        *cur_line;
  122.   static F_spline        *cur_spline;
  123.  
  124. --- 43,49 -----
  125.               fix_linepoint_adding();
  126.               mm_fix_linepoint_adding();
  127.               fix_splinepoint_adding();
  128. +             latex_elasticline();
  129.   
  130.   static F_line        *cur_line;
  131.   static F_spline        *cur_spline;
  132. ***************
  133. *** 180,186
  134.       find_endpoints(cur_line->points,px,py,&left_point,&right_point);
  135.       set_temp_cursor(&null_cursor);
  136.       win_setmouseposition(canvas_swfd, px, py);
  137. !     cur_x = px; cur_y = py;
  138.       if (left_point == NULL && cur_line->type == T_POLYGON) {
  139.           left_point = right_point;
  140.           right_point = right_point->next;
  141.  
  142. --- 185,191 -----
  143.       find_endpoints(cur_line->points,px,py,&left_point,&right_point);
  144.       set_temp_cursor(&null_cursor);
  145.       win_setmouseposition(canvas_swfd, px, py);
  146. !     cur_x = fix_x = px; cur_y = fix_y = py;
  147.       if (left_point == NULL && cur_line->type == T_POLYGON) {
  148.           left_point = right_point;
  149.           right_point = right_point->next;
  150. ***************
  151. *** 190,197
  152.           left_point->x, left_point->y,
  153.           right_point->x, right_point->y, INV_PAINT);
  154.       draw_addedlink(INV_PAINT);
  155. !     canvas_locmove_proc = move_addedpoint;
  156. !     canvas_middlebut_proc = fix_linepoint_adding;
  157.       }
  158.   
  159.   fix_linepoint_adding(x, y)
  160.  
  161. --- 195,209 -----
  162.           left_point->x, left_point->y,
  163.           right_point->x, right_point->y, INV_PAINT);
  164.       draw_addedlink(INV_PAINT);
  165. !     if (latexline_mode || latexarrow_mode) {
  166. !         canvas_locmove_proc = latex_elasticline;
  167. !         canvas_middlebut_proc = mm_fix_linepoint_adding;
  168. !         }
  169. !     if( (mountain_mode || manhattan_mode) &&
  170. !        (left_point == NULL || right_point == NULL) )
  171. !     {
  172. !         canvas_locmove_proc = determine_angle;
  173. !         canvas_middlebut_proc = mm_fix_linepoint_adding;
  174.       }
  175.       else
  176.       {
  177. ***************
  178. *** 193,198
  179.       canvas_locmove_proc = move_addedpoint;
  180.       canvas_middlebut_proc = fix_linepoint_adding;
  181.       }
  182.   
  183.   fix_linepoint_adding(x, y)
  184.   int    x, y;
  185.  
  186. --- 205,216 -----
  187.           canvas_locmove_proc = determine_angle;
  188.           canvas_middlebut_proc = mm_fix_linepoint_adding;
  189.       }
  190. +     else
  191. +     {
  192. +         canvas_locmove_proc = move_addedpoint;
  193. +         canvas_middlebut_proc = fix_linepoint_adding;
  194. +     }
  195. +     }
  196.   
  197.   fix_linepoint_adding(x, y)
  198.   int    x, y;
  199. ***************
  200. *** 208,213
  201.       added_point = p;
  202.       added_point->x = x;
  203.       added_point->y = y;
  204.       draw_addedlink(INV_PAINT);
  205.       linepoint_adding(cur_line, added_point);
  206.       set_action_object(F_ADD_POINT, O_POLYLINE);
  207.  
  208. --- 226,252 -----
  209.       added_point = p;
  210.       added_point->x = x;
  211.       added_point->y = y;
  212. +     draw_addedlink(INV_PAINT);
  213. +     linepoint_adding(cur_line, added_point);
  214. +     set_action_object(F_ADD_POINT, O_POLYLINE);
  215. +     set_latestline(cur_line);
  216. +     wrapup_pointadding();
  217. +     }
  218. + mm_fix_linepoint_adding(x, y)
  219. + int    x, y;
  220. + {
  221. +     F_point        *p;
  222. +     if (NULL == (Point_malloc(p))) {
  223. +         put_msg(Err_mem);
  224. +         wrapup_pointadding();
  225. +         return;
  226. +         }
  227. +     clean_up();
  228. +     added_point = p;
  229. +     added_point->x = cur_x;
  230. +     added_point->y = cur_y;
  231.       draw_addedlink(INV_PAINT);
  232.       linepoint_adding(cur_line, added_point);
  233.       set_action_object(F_ADD_POINT, O_POLYLINE);
  234.  
  235. *** /tmp/d16286    Thu Dec  1 11:43:38 1988
  236. --- arc.c    Wed Nov 30 08:53:36 1988
  237. ***************
  238. *** 73,79
  239.   {
  240.       if (x == fix_x && y == fix_y) return;
  241.   
  242. !     if (num_point == 2) create_arcobject(x, y);
  243.       draw_elasticline();        /* in line.c  */
  244.       cur_x = x;  cur_y = y;
  245.       draw_elasticline();        /* in line.c  */
  246.  
  247. --- 73,83 -----
  248.   {
  249.       if (x == fix_x && y == fix_y) return;
  250.   
  251. !     if (num_point == 2)
  252. !     {
  253. !         create_arcobject(x, y);
  254. !         return;
  255. !     }
  256.       draw_elasticline();        /* in line.c  */
  257.       cur_x = x;  cur_y = y;
  258.       draw_elasticline();        /* in line.c  */
  259.  
  260. *** /tmp/d16289    Thu Dec  1 11:43:38 1988
  261. --- const.h    Wed Nov 30 09:44:58 1988
  262. ***************
  263. *** 7,13
  264.    *    %W%    %G%
  265.   */
  266.   #define        PIX_PER_INCH        80
  267.   #define        DEF_CANVAS_HEIGHT    800 /* (10 * PIX_PER_INCH) */
  268.   #define        DEF_CANVAS_WIDTH    600 /* ( 7.5 * PIX_PER_INCH) */
  269.   #define        RULER_WIDTH        24
  270.  
  271. --- 7,14 -----
  272.    *    %W%    %G%
  273.   */
  274.   #define        PIX_PER_INCH        80
  275. ! #define        PIX_PER_CM        ((int)(PIX_PER_INCH / 2.54 + (5.0/2)))
  276. !                       
  277.   #define        DEF_CANVAS_HEIGHT    800 /* (10 * PIX_PER_INCH) */
  278.   #define        DEF_CANVAS_WIDTH    600 /* ( 7.5 * PIX_PER_INCH) */
  279.   #define        RULER_WIDTH        24
  280.  
  281. *** /tmp/d16292    Thu Dec  1 11:43:39 1988
  282. --- f2p.c    Thu Dec  1 09:50:35 1988
  283. ***************
  284. *** 463,468
  285.   
  286.       p1 = s->points;
  287.       cp1 = s->controls;
  288.       x2 = p1->x/ppi; y2 = convy(p1->y/ppi);
  289.   
  290.       if (s->for_arrow)
  291.  
  292. --- 463,469 -----
  293.   
  294.       p1 = s->points;
  295.       cp1 = s->controls;
  296. +     cp2 = cp1->next;
  297.       x2 = p1->x/ppi; y2 = convy(p1->y/ppi);
  298.   
  299.       if (s->back_arrow)
  300. ***************
  301. *** 465,473
  302.       cp1 = s->controls;
  303.       x2 = p1->x/ppi; y2 = convy(p1->y/ppi);
  304.   
  305. !     if (s->for_arrow)
  306. !         draw_arrow_head(cp1->rx/ppi, convy(cp1->ry/ppi), x2, y2,
  307. !         s->for_arrow->ht/ppi, s->for_arrow->wid/ppi);
  308.   
  309.       for (p2 = p1->next, cp2 = cp1->next; p2 != NULL;
  310.           p1 = p2, cp1 = cp2, p2 = p2->next, cp2 = cp2->next) {
  311.  
  312. --- 466,474 -----
  313.       cp2 = cp1->next;
  314.       x2 = p1->x/ppi; y2 = convy(p1->y/ppi);
  315.   
  316. !     if (s->back_arrow)
  317. !         draw_arrow_head(cp2->lx/ppi, convy(cp2->ly/ppi), x2, y2,
  318. !         s->back_arrow->ht/ppi, s->back_arrow->wid/ppi);
  319.   
  320.       for (p2 = p1->next, cp2 = cp1->next; p2 != NULL;
  321.           p1 = p2, cp1 = cp2, p2 = p2->next, cp2 = cp2->next) {
  322. ***************
  323. *** 479,487
  324.           fprintf(tfp, "\n");
  325.           }
  326.   
  327. !     if (s->back_arrow)
  328. !         draw_arrow_head(cp1->lx/ppi, convy(cp1->ly/ppi), x2, y2,
  329. !         s->back_arrow->ht/ppi, s->back_arrow->wid/ppi);
  330.       }
  331.   
  332.   bezier_spline(a0, b0, a1, b1, a2, b2, a3, b3)
  333.  
  334. --- 480,488 -----
  335.           fprintf(tfp, "\n");
  336.           }
  337.   
  338. !     if (s->for_arrow)
  339. !         draw_arrow_head((double)cp1->lx/ppi, convy(cp1->ly/ppi), x1, y1,
  340. !         (double)s->for_arrow->ht/ppi, (double)s->for_arrow->wid/ppi);
  341.       }
  342.   
  343.   bezier_spline(a0, b0, a1, b1, a2, b2, a3, b3)
  344.  
  345. *** /tmp/d16295    Thu Dec  1 11:43:40 1988
  346. --- f2ps.c    Wed Nov 30 15:44:37 1988
  347. ***************
  348. *** 394,399
  349.   
  350.       set_linewidth(s->thickness);
  351.       a = s->controls;
  352.       p = s->points;
  353.       if (s->for_arrow)
  354.           draw_arrow_head(a->rx, a->ry, (float)p->x,
  355.  
  356. --- 394,400 -----
  357.   
  358.       set_linewidth(s->thickness);
  359.       a = s->controls;
  360. +     b = a->next;
  361.       p = s->points;
  362.       if (s->back_arrow)
  363.           draw_arrow_head(b->lx, b->ly, (float)p->x,
  364. ***************
  365. *** 395,403
  366.       set_linewidth(s->thickness);
  367.       a = s->controls;
  368.       p = s->points;
  369. !     if (s->for_arrow)
  370. !         draw_arrow_head(a->rx, a->ry, (float)p->x,
  371. !             (float)p->y, s->for_arrow->ht, s->for_arrow->wid);
  372.   
  373.       set_style(s->style, s->style_val);
  374.       fprintf(tfp, "%% Interpolated spline\n");
  375.  
  376. --- 396,404 -----
  377.       a = s->controls;
  378.       b = a->next;
  379.       p = s->points;
  380. !     if (s->back_arrow)
  381. !         draw_arrow_head(b->lx, b->ly, (float)p->x,
  382. !             (float)p->y, s->back_arrow->ht, s->back_arrow->wid);
  383.   
  384.       set_style(s->style, s->style_val);
  385.       fprintf(tfp, "%% Interpolated spline\n");
  386.  
  387. *** /tmp/d16298    Thu Dec  1 11:43:41 1988
  388. --- global.c    Wed Nov 30 08:54:09 1988
  389. ***************
  390. *** 42,47
  391.   int            SIDERULER_START;
  392.   int            TOPRULER_LEFT, TOPRULER_TOP;
  393.   int            TOPRULER_WIDTH, TOPRULER_HEIGHT;
  394.   int            borderwid, windowspacing, toolstripeht;
  395.   
  396.   int            num_point;
  397.  
  398. --- 42,48 -----
  399.   int            SIDERULER_START;
  400.   int            TOPRULER_LEFT, TOPRULER_TOP;
  401.   int            TOPRULER_WIDTH, TOPRULER_HEIGHT;
  402. + int            INCHES;
  403.   int            borderwid, windowspacing, toolstripeht;
  404.   
  405.   int            num_point;
  406.  
  407. *** /tmp/d16302    Thu Dec  1 11:43:42 1988
  408. --- grid.c    Wed Nov 30 09:26:50 1988
  409. ***************
  410. *** 15,20
  411.   
  412.   static int    cur_grid = -1;
  413.   extern int    CANVAS_WIDTH, CANVAS_HEIGHT;
  414.   
  415.   #ifndef    X11
  416.   static PIXRECT    h_grid_pr, v_grid1_pr, v_grid2_pr;
  417.  
  418. --- 15,21 -----
  419.   
  420.   static int    cur_grid = -1;
  421.   extern int    CANVAS_WIDTH, CANVAS_HEIGHT;
  422. + extern int    INCHES;
  423.   
  424.   #ifndef    X11
  425.   static PIXRECT    h_grid_pr, v_grid1_pr, v_grid2_pr;
  426. ***************
  427. *** 128,134
  428.      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  429.      0x00, 0x00, 0x00, 0x10, 0x42, 0x08, 0x21, 0x84};
  430.   
  431. ! static Pixmap    null_pm, quarter_pm, half_pm;
  432.   
  433.   init_grid()
  434.   {
  435.  
  436. --- 129,140 -----
  437.      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  438.      0x00, 0x00, 0x00, 0x10, 0x42, 0x08, 0x21, 0x84};
  439.   
  440. ! #define half_cm_width 15
  441. ! #define half_cm_height 15
  442. ! static char half_cm_bits[] = {
  443. !    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
  444. !    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
  445. !    0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00};
  446.   
  447.   static Pixmap    null_pm, quarter_pm, half_pm, half_cm_pm;
  448.   
  449. ***************
  450. *** 130,135
  451.   
  452.   static Pixmap    null_pm, quarter_pm, half_pm;
  453.   
  454.   init_grid()
  455.   {
  456.       long    bg, fg;
  457.  
  458. --- 136,143 -----
  459.      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
  460.      0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00};
  461.   
  462. + static Pixmap    null_pm, quarter_pm, half_pm, half_cm_pm;
  463.   init_grid()
  464.   {
  465.       long    bg, fg;
  466. ***************
  467. *** 148,153
  468.       half_pm = XCreatePixmapFromBitmapData(tool_d, canvas_pixwin,
  469.           half_bits, half_width, half_height,
  470.           fg, bg,    DefaultDepthOfScreen(tool_s));
  471.   }
  472.   
  473.   setup_grid(grid)
  474.  
  475. --- 156,164 -----
  476.       half_pm = XCreatePixmapFromBitmapData(tool_d, canvas_pixwin,
  477.           half_bits, half_width, half_height,
  478.           fg, bg,    DefaultDepthOfScreen(tool_s));
  479. +     half_cm_pm = XCreatePixmapFromBitmapData(tool_d, canvas_pixwin,
  480. +         half_cm_bits, half_cm_width, half_cm_height,
  481. +         fg, bg, DefaultDepthOfScreen(tool_s));
  482.   }
  483.   
  484.   setup_grid(grid)
  485. ***************
  486. *** 163,172
  487.           grid_args[0].value = (XtArgVal)null_pm;
  488.           grid = -1;
  489.       }
  490. !     if (grid == F_GRID1)
  491. !         grid_args[0].value = (XtArgVal)quarter_pm;
  492. !     else if (grid == F_GRID2)
  493. !         grid_args[0].value = (XtArgVal)half_pm;
  494.       cur_grid = grid;
  495.       XtSetValues(canvas_sw, grid_args, XtNumber(grid_args));
  496.   }
  497.  
  498. --- 174,187 -----
  499.           grid_args[0].value = (XtArgVal)null_pm;
  500.           grid = -1;
  501.       }
  502. !     if( INCHES )
  503. !     {
  504. !         if (grid == F_GRID1)
  505. !             grid_args[0].value = (XtArgVal)quarter_pm;
  506. !         else if (grid == F_GRID2)
  507. !             grid_args[0].value = (XtArgVal)half_pm;
  508. !     }else if (grid == F_GRID1 || grid == F_GRID2)
  509. !         grid_args[0].value = (XtArgVal)half_cm_pm;
  510.       cur_grid = grid;
  511.       XtSetValues(canvas_sw, grid_args, XtNumber(grid_args));
  512.   }
  513.  
  514. *** /tmp/d16305    Thu Dec  1 11:43:42 1988
  515. --- intspline.c    Wed Nov 30 15:36:37 1988
  516. ***************
  517. *** 172,180
  518.   
  519.       p1 = s->points;
  520.       cp1 = s->controls;
  521. !     if (s->for_arrow)
  522. !         draw_arrow(round(cp1->rx), round(cp1->ry), p1->x,
  523. !             p1->y, s->for_arrow, op);
  524.       for (p2 = p1->next, cp2 = cp1->next; p2 != NULL;
  525.           p1 = p2, cp1 = cp2, p2 = p2->next, cp2 = cp2->next) {
  526.           bezier_spline((float)p1->x, (float)p1->y, cp1->rx, cp1->ry,
  527.  
  528. --- 172,181 -----
  529.   
  530.       p1 = s->points;
  531.       cp1 = s->controls;
  532. !     cp2 = cp1->next;
  533. !     if (s->back_arrow)
  534. !         draw_arrow(round(cp2->lx), round(cp2->ly), p1->x, p1->y, 
  535. !                s->back_arrow, op);
  536.       for (p2 = p1->next, cp2 = cp1->next; p2 != NULL;
  537.           p1 = p2, cp1 = cp2, p2 = p2->next, cp2 = cp2->next) {
  538.           bezier_spline((float)p1->x, (float)p1->y, cp1->rx, cp1->ry,
  539. ***************
  540. *** 180,186
  541.           bezier_spline((float)p1->x, (float)p1->y, cp1->rx, cp1->ry,
  542.               cp2->lx, cp2->ly, (float)p2->x, (float)p2->y, op);
  543.           }
  544. !     if (s->back_arrow)
  545.           draw_arrow(round(cp1->lx), round(cp1->ly), p1->x,
  546.               p1->y, s->back_arrow, op);
  547.       }
  548.  
  549. --- 181,187 -----
  550.           bezier_spline((float)p1->x, (float)p1->y, cp1->rx, cp1->ry,
  551.               cp2->lx, cp2->ly, (float)p2->x, (float)p2->y, op);
  552.           }
  553. !     if (s->for_arrow)
  554.           draw_arrow(round(cp1->lx), round(cp1->ly), p1->x,
  555.               p1->y, s->for_arrow, op);
  556.       }
  557. ***************
  558. *** 182,188
  559.           }
  560.       if (s->back_arrow)
  561.           draw_arrow(round(cp1->lx), round(cp1->ly), p1->x,
  562. !             p1->y, s->back_arrow, op);
  563.       }
  564.   
  565.   #define        T        0.45
  566.  
  567. --- 183,189 -----
  568.           }
  569.       if (s->for_arrow)
  570.           draw_arrow(round(cp1->lx), round(cp1->ly), p1->x,
  571. !             p1->y, s->for_arrow, op);
  572.       }
  573.   
  574.   #define        T        0.45
  575.  
  576. *** /tmp/d16309    Thu Dec  1 11:43:43 1988
  577. --- line.c    Tue Nov 29 16:11:36 1988
  578. ***************
  579. *** 290,296
  580.   
  581.       dot = 0;
  582.       if (x != fix_x || y != fix_y) {
  583. !         get_intermediatepoint(x, y);
  584.           draw_elasticline();
  585.           }
  586.       else if (num_point == 1) {
  587.  
  588. --- 290,301 -----
  589.   
  590.       dot = 0;
  591.       if (x != fix_x || y != fix_y) {
  592. !         if( manhattan_mode || mountain_mode )
  593. !             get_direction(x, y);
  594. !         else if( latexline_mode || latexarrow_mode )
  595. !             get_latexpoint(x, y);
  596. !         else
  597. !             get_intermediatepoint(x, y);
  598.           draw_elasticline();
  599.           }
  600.       else if (num_point == 1) {
  601. ***************
  602. *** 295,301
  603.           }
  604.       else if (num_point == 1) {
  605.           dot = 1;
  606. !         get_intermediatepoint(x, y);
  607.           draw_elasticline();
  608.           }
  609.       if (NULL == (Line_malloc(line))) {
  610.  
  611. --- 300,311 -----
  612.           }
  613.       else if (num_point == 1) {
  614.           dot = 1;
  615. !         if( manhattan_mode || mountain_mode )
  616. !             get_direction(x, y);
  617. !         else if( latexline_mode || latexarrow_mode )
  618. !             get_latexpoint(x, y);
  619. !         else
  620. !             get_intermediatepoint(x, y);
  621.           draw_elasticline();
  622.           }
  623.       if (NULL == (Line_malloc(line))) {
  624.  
  625. *** /tmp/d16312    Thu Dec  1 11:43:44 1988
  626. --- main.c    Wed Nov 30 11:30:15 1988
  627. ***************
  628. *** 9,14
  629.   #include "fig.h"
  630.   #include "const.h"
  631.   #include "version.h"
  632.   
  633.   extern int        borderwid, windowspacing, toolstripeht;
  634.   extern int        ICON_COLUMN;
  635.  
  636. --- 9,15 -----
  637.   #include "fig.h"
  638.   #include "const.h"
  639.   #include "version.h"
  640. + #include "patchlevel.h"
  641.   
  642.   extern int        borderwid, windowspacing, toolstripeht;
  643.   extern int        ICON_COLUMN;
  644. ***************
  645. *** 21,26
  646.   extern int        SIDERULER_START;
  647.   extern int        TOPRULER_LEFT, TOPRULER_TOP;
  648.   extern int        TOPRULER_WIDTH, TOPRULER_HEIGHT;
  649.   extern            (*canvas_rightbut_proc)();
  650.   extern            set_popupmenu();
  651.   
  652.  
  653. --- 22,28 -----
  654.   extern int        SIDERULER_START;
  655.   extern int        TOPRULER_LEFT, TOPRULER_TOP;
  656.   extern int        TOPRULER_WIDTH, TOPRULER_HEIGHT;
  657. + extern int        INCHES;
  658.   extern            (*canvas_rightbut_proc)();
  659.   extern            set_popupmenu();
  660.   
  661. ***************
  662. *** 61,66
  663.   char            file_header[32] = "#FIG ";
  664.   static char        *file = NULL;
  665.   
  666.   get_args(argc, argv)
  667.   int    argc;
  668.   char    **argv;
  669.  
  670. --- 63,69 -----
  671.   char            file_header[32] = "#FIG ";
  672.   static char        *file = NULL;
  673.   
  674. + #ifndef    X11
  675.   get_args(argc, argv)
  676.   int    argc;
  677.   char    **argv;
  678. ***************
  679. *** 136,142
  680.       }
  681.   }
  682.   
  683. - #ifndef    X11
  684.   main(argc, argv)
  685.   int    argc;
  686.   char    **argv;
  687.  
  688. --- 139,144 -----
  689.       }
  690.   }
  691.   
  692.   main(argc, argv)
  693.   int    argc;
  694.   char    **argv;
  695. ***************
  696. *** 172,182
  697.   }
  698.   #else
  699.   
  700. ! static int true = True;
  701. ! static int false = False;
  702. ! static int zero = 0;
  703. ! int    landscape;
  704. ! float    tmp_width = 0.0, tmp_height = 0.0;
  705.   
  706.   #define XtRFloat                "Float" 
  707.   
  708.  
  709. --- 174,184 -----
  710.   }
  711.   #else
  712.   
  713. ! static int    true = True;
  714. ! static int    false = False;
  715. ! static int    zero = 0;
  716. ! static int    landscape;
  717. ! static float    tmp_width = 0.0, tmp_height = 0.0;
  718.   
  719.   #define XtRFloat                "Float" 
  720.   
  721. ***************
  722. *** 195,200
  723.            (Cardinal)&INVERSE, XtRBoolean, (caddr_t)&false},
  724.       {"trackCursor", "Track", XtRBoolean, sizeof(int),
  725.            (Cardinal)&TRACKING, XtRBoolean, (caddr_t)&true},
  726.   };
  727.   
  728.   static XrmOptionDescRec options[] =
  729.  
  730. --- 197,204 -----
  731.            (Cardinal)&INVERSE, XtRBoolean, (caddr_t)&false},
  732.       {"trackCursor", "Track", XtRBoolean, sizeof(int),
  733.            (Cardinal)&TRACKING, XtRBoolean, (caddr_t)&true},
  734. +     {"inches", "Inches", XtRBoolean, sizeof(int),
  735. +          (Cardinal)&INCHES, XtRBoolean, (caddr_t)&true},
  736.   };
  737.   
  738.   static XrmOptionDescRec options[] =
  739. ***************
  740. *** 211,216
  741.       {"-inverse", ".reverseVideo", XrmoptionNoArg, "True"},
  742.       {"-notrack", ".trackCursor", XrmoptionNoArg, "False"},
  743.       {"-track", ".trackCursor", XrmoptionNoArg, "True"},
  744.   };
  745.   
  746.   static XtCallbackRec    callbacks[] =
  747.  
  748. --- 215,224 -----
  749.       {"-inverse", ".reverseVideo", XrmoptionNoArg, "True"},
  750.       {"-notrack", ".trackCursor", XrmoptionNoArg, "False"},
  751.       {"-track", ".trackCursor", XrmoptionNoArg, "True"},
  752. +     {"-inches", ".inches", XrmoptionNoArg, "True"},
  753. +     {"-imperial", ".inches", XrmoptionNoArg, "True"},
  754. +     {"-centimeters", ".inches", XrmoptionNoArg, "False"},
  755. +     {"-metric", ".inches", XrmoptionNoArg, "False"},
  756.   };
  757.   
  758.   static XtCallbackRec    callbacks[] =
  759. ***************
  760. *** 234,240
  761.   
  762.       strcat(tool_name, FIG_VERSION);
  763.       strcat(file_header, FIG_VERSION);
  764. !     printf("Initializing FIG %s%s (X11) ... \n", FIG_VERSION, MINOR_VERSION);
  765.       tool = XtInitialize("fig", "Fig", options, XtNumber(options),
  766.           &argc, argv);
  767.   
  768.  
  769. --- 242,248 -----
  770.   
  771.       strcat(tool_name, FIG_VERSION);
  772.       strcat(file_header, FIG_VERSION);
  773. !     printf("Initializing FIG %s%s (X11 patchlevel %d) ... \n", FIG_VERSION, MINOR_VERSION, PATCHLEVEL);
  774.       tool = XtInitialize("fig", "Fig", options, XtNumber(options),
  775.           &argc, argv);
  776.   
  777. ***************
  778. *** 287,294
  779.           form_args, XtNumber(form_args));
  780.       
  781.       ICON_COLUMN = ICON_COLUMN_PORT;
  782. !     CANVAS_WIDTH = tmp_width * PIX_PER_INCH;
  783. !     CANVAS_HEIGHT = tmp_height * PIX_PER_INCH;
  784.   
  785.       if( CANVAS_WIDTH == 0 )
  786.           CANVAS_WIDTH = landscape ? DEF_CANVAS_HEIGHT :
  787.  
  788. --- 295,302 -----
  789.           form_args, XtNumber(form_args));
  790.       
  791.       ICON_COLUMN = ICON_COLUMN_PORT;
  792. !     CANVAS_WIDTH = tmp_width * (INCHES ? PIX_PER_INCH : PIX_PER_CM);
  793. !     CANVAS_HEIGHT = tmp_height * (INCHES ? PIX_PER_INCH : PIX_PER_CM);
  794.   
  795.       if( CANVAS_WIDTH == 0 )
  796.           CANVAS_WIDTH = landscape ? DEF_CANVAS_HEIGHT :
  797.  
  798. *** /tmp/d16315    Thu Dec  1 11:43:45 1988
  799. --- ruler.c    Wed Nov 30 09:16:47 1988
  800. ***************
  801. *** 40,45
  802.   extern            null_proc();
  803.   extern int        RHS_PANEL;
  804.   extern int        TRACKING;
  805.   
  806.   static            lasty = -100;
  807.   static            lastx = -100;
  808.  
  809. --- 40,46 -----
  810.   extern            null_proc();
  811.   extern int        RHS_PANEL;
  812.   extern int        TRACKING;
  813. + extern int        INCHES;
  814.   
  815.   static            lasty = -100;
  816.   static            lastx = -100;
  817. ***************
  818. *** 276,281
  819.       register Pixmap        p;
  820.   #define    QINCH    (PIX_PER_INCH / 4)
  821.   #define    SINCH    (PIX_PER_INCH / 16)
  822.       char            number[3];
  823.       Arg            tmp_arg[3];
  824.       long            bg, fg;
  825.  
  826. --- 277,283 -----
  827.       register Pixmap        p;
  828.   #define    QINCH    (PIX_PER_INCH / 4)
  829.   #define    SINCH    (PIX_PER_INCH / 16)
  830. + #define TWOMM    (PIX_PER_CM / 5)    
  831.       char            number[3];
  832.       Arg            tmp_arg[3];
  833.       long            bg, fg;
  834. ***************
  835. *** 304,310
  836.               TOPRULER_HEIGHT);
  837.       XSetForeground(tool_d, gc, fg);
  838.       
  839. !     for (i = SINCH - 1; i <= TOPRULER_WIDTH; i += SINCH)
  840.       {
  841.           j = i + 1;
  842.           if (j % PIX_PER_INCH == 0)
  843.  
  844. --- 306,314 -----
  845.               TOPRULER_HEIGHT);
  846.       XSetForeground(tool_d, gc, fg);
  847.       
  848. !     XDrawString(tool_d, p, gc, 2, TOPRULER_HEIGHT - INCH_MARK - 3,
  849. !             INCHES ? "in" : "cm", 2);
  850. !     if(INCHES) for (i = SINCH - 1; i <= TOPRULER_WIDTH; i += SINCH)
  851.       {
  852.           j = i + 1;
  853.           if (j % PIX_PER_INCH == 0)
  854. ***************
  855. *** 323,328
  856.               XDrawLine(tool_d, p, gc, i, TOPRULER_HEIGHT - 1, i,
  857.                   TOPRULER_HEIGHT - SIXTEENTH_MARK - 1);
  858.       }
  859.       ruler_args[0].value = (XtArgVal)p;
  860.       XtSetValues(topruler_sw, ruler_args, 1);
  861.   
  862.  
  863. --- 327,348 -----
  864.               XDrawLine(tool_d, p, gc, i, TOPRULER_HEIGHT - 1, i,
  865.                   TOPRULER_HEIGHT - SIXTEENTH_MARK - 1);
  866.       }
  867. +     else for (i = TWOMM - 1; i <= TOPRULER_WIDTH; i++)
  868. +     {
  869. +         j = i + 1;
  870. +         if (j % PIX_PER_CM == 0)
  871. +         {
  872. +             XDrawLine(tool_d, p, gc, i, TOPRULER_HEIGHT - 1, i,
  873. +                   TOPRULER_HEIGHT - INCH_MARK - 1);
  874. +             sprintf(number, "%d", j / PIX_PER_CM);
  875. +             XDrawString(tool_d, p, gc, i - 2,
  876. +                     TOPRULER_HEIGHT - INCH_MARK - 3, number,
  877. +                     j < PIX_PER_CM * 10 ? 1 : 2);
  878. +         }
  879. +         else if (j % TWOMM == 0)
  880. +             XDrawLine(tool_d, p, gc, i, TOPRULER_HEIGHT - 1, i,
  881. +                   TOPRULER_HEIGHT - QUARTER_MARK - 1);
  882. +     }
  883.       ruler_args[0].value = (XtArgVal)p;
  884.       XtSetValues(topruler_sw, ruler_args, 1);
  885.   
  886. ***************
  887. *** 359,365
  888.               SIDERULER_HEIGHT);
  889.       XSetForeground(tool_d, gc, fg);
  890.       
  891. !     if( RHS_PANEL )
  892.       {
  893.           for (i = SINCH - 1; i <= SIDERULER_HEIGHT; i += SINCH)
  894.           {
  895.  
  896. --- 379,385 -----
  897.               SIDERULER_HEIGHT);
  898.       XSetForeground(tool_d, gc, fg);
  899.       
  900. !     if( INCHES ) 
  901.       {
  902.           if( RHS_PANEL )
  903.           {
  904. ***************
  905. *** 361,366
  906.       
  907.       if( RHS_PANEL )
  908.       {
  909.           for (i = SINCH - 1; i <= SIDERULER_HEIGHT; i += SINCH)
  910.           {
  911.               j = i + 1;
  912.  
  913. --- 381,388 -----
  914.       
  915.       if( INCHES ) 
  916.       {
  917. +         if( RHS_PANEL )
  918. +         {
  919.           for (i = SINCH - 1; i <= SIDERULER_HEIGHT; i += SINCH)
  920.           {
  921.               j = i + 1;
  922. ***************
  923. *** 382,390
  924.                         RULER_WIDTH-SIXTEENTH_MARK, i,
  925.                         RULER_WIDTH, i);
  926.           }
  927. !     }
  928. !     else
  929. !     {
  930.           for (i = SINCH - 1; i <= SIDERULER_HEIGHT; i += SINCH)
  931.           {
  932.               j = i + 1;
  933.  
  934. --- 404,412 -----
  935.                         RULER_WIDTH-SIXTEENTH_MARK, i,
  936.                         RULER_WIDTH, i);
  937.           }
  938. !         }
  939. !         else
  940. !         {
  941.           for (i = SINCH - 1; i <= SIDERULER_HEIGHT; i += SINCH)
  942.           {
  943.               j = i + 1;
  944. ***************
  945. *** 404,409
  946.                   XDrawLine(tool_d, p, gc, 0, i,
  947.                         SIXTEENTH_MARK - 1, i);
  948.           }    
  949.       }
  950.       ruler_args[0].value = (XtArgVal)p;
  951.       XtSetValues(sideruler_sw, ruler_args, 1);
  952.  
  953. --- 426,474 -----
  954.                   XDrawLine(tool_d, p, gc, 0, i,
  955.                         SIXTEENTH_MARK - 1, i);
  956.           }    
  957. +         }
  958. +     }
  959. +     else 
  960. +     {
  961. +         if( RHS_PANEL )
  962. +         {
  963. +         for (i = TWOMM - 1; i <= SIDERULER_HEIGHT; i++)
  964. +         {
  965. +             j = i + 1;
  966. +             if (j % PIX_PER_CM == 0)
  967. +             {
  968. +                 XDrawLine(tool_d, p, gc, RULER_WIDTH-INCH_MARK,
  969. +                       i, RULER_WIDTH, i);
  970. +                 sprintf(number, "%d", j / PIX_PER_CM);
  971. +                 XDrawString(tool_d, p, gc,
  972. +                         RULER_WIDTH-INCH_MARK - 8, i + 3,
  973. +                         number, j < PIX_PER_CM * 10 ? 1 : 2);
  974. +             }
  975. +             else if (j % TWOMM == 0)
  976. +                 XDrawLine(tool_d, p, gc,
  977. +                       RULER_WIDTH-QUARTER_MARK, i,
  978. +                       RULER_WIDTH, i);
  979. +         }
  980. +         }
  981. +         else
  982. +         {
  983. +         for (i = TWOMM - 1; i <= SIDERULER_HEIGHT; i++)
  984. +         {
  985. +             j = i + 1;
  986. +             if (j % PIX_PER_CM == 0)
  987. +             {
  988. +                 XDrawLine(tool_d, p, gc, 0, i,
  989. +                       INCH_MARK - 1, i);
  990. +                 sprintf(number, "%d", j / PIX_PER_CM);
  991. +                 XDrawString(tool_d, p, gc, INCH_MARK + 3,
  992. +                         i + 3, number,
  993. +                         j < PIX_PER_CM * 10 ? 1 : 2);
  994. +             }
  995. +             else if (j % TWOMM == 0)
  996. +                 XDrawLine(tool_d, p, gc, 0, i,
  997. +                       QUARTER_MARK - 1, i);
  998. +                 }
  999. +         }
  1000.       }
  1001.       ruler_args[0].value = (XtArgVal)p;
  1002.       XtSetValues(sideruler_sw, ruler_args, 1);
  1003.  
  1004. *** /tmp/d16318    Thu Dec  1 11:43:48 1988
  1005. --- xfig.1    Thu Dec  1 11:41:17 1988
  1006. ***************
  1007. *** 7,14
  1008.   [ \fB-le[ft]\fP ]
  1009.   [ \fB-L[andscape]\fP ]
  1010.   [ \fB-P[ortrait]\fP ]
  1011. ! [ \fB-w[idth]\fP \fIinches\fP ]
  1012. ! [ \fB-h[eight]\fP \fIinches\fP ]
  1013.   [ \fB-no[track]\fP ]
  1014.   [ \fB-tr[ack]\fP ]
  1015.   [ \fIfile\fP ]
  1016.  
  1017. --- 7,14 -----
  1018.   [ \fB-le[ft]\fP ]
  1019.   [ \fB-L[andscape]\fP ]
  1020.   [ \fB-P[ortrait]\fP ]
  1021. ! [ \fB-w[idth]\fP \fIunits\fP ]
  1022. ! [ \fB-h[eight]\fP \fIunits\fP ]
  1023.   [ \fB-no[track]\fP ]
  1024.   [ \fB-tr[ack]\fP ]
  1025.   [ \fB-inc[hes]\fP ]
  1026. ***************
  1027. *** 11,16
  1028.   [ \fB-h[eight]\fP \fIinches\fP ]
  1029.   [ \fB-no[track]\fP ]
  1030.   [ \fB-tr[ack]\fP ]
  1031.   [ \fIfile\fP ]
  1032.   .SH DESCRIPTION
  1033.   .I Xfig 
  1034.  
  1035. --- 11,20 -----
  1036.   [ \fB-h[eight]\fP \fIunits\fP ]
  1037.   [ \fB-no[track]\fP ]
  1038.   [ \fB-tr[ack]\fP ]
  1039. + [ \fB-inc[hes]\fP ]
  1040. + [ \fB-me[tric]\fP ]
  1041. + [ \fB-inv[erse]\fP ]
  1042. + [ \fB-de[bug]\fP ]
  1043.   [ \fIfile\fP ]
  1044.   .SH DESCRIPTION
  1045.   .I Xfig 
  1046. ***************
  1047. *** 84,91
  1048.   Make \fIxfig\fP come up in portrait mode (7.5" x 10"). This is the
  1049.   default.
  1050.   .TP
  1051. ! \fB-w\fP \fIinches\fP
  1052. ! Make \fIxfig\fP come up \fIinches\fP wide.
  1053.   .TP
  1054.   \fB-h\fP \fIinches\fP
  1055.   Make \fIxfig\fP come up \fIinches\fP high.
  1056.  
  1057. --- 88,95 -----
  1058.   Make \fIxfig\fP come up in portrait mode (7.5" x 10"). This is the
  1059.   default.
  1060.   .TP
  1061. ! \fB-w\fP \fIunits\fP
  1062. ! Make \fIxfig\fP come up \fIunits\fP wide (where units are either cm or in).
  1063.   .TP
  1064.   \fB-h\fP \fIunits\fP
  1065.   Make \fIxfig\fP come up \fIunits\fP high (where units are either cm or in).
  1066. ***************
  1067. *** 87,94
  1068.   \fB-w\fP \fIinches\fP
  1069.   Make \fIxfig\fP come up \fIinches\fP wide.
  1070.   .TP
  1071. ! \fB-h\fP \fIinches\fP
  1072. ! Make \fIxfig\fP come up \fIinches\fP high.
  1073.   .TP
  1074.   \fB-tr\fP
  1075.   Turn on cursor (mouse) tracking arrows.
  1076.  
  1077. --- 91,98 -----
  1078.   \fB-w\fP \fIunits\fP
  1079.   Make \fIxfig\fP come up \fIunits\fP wide (where units are either cm or in).
  1080.   .TP
  1081. ! \fB-h\fP \fIunits\fP
  1082. ! Make \fIxfig\fP come up \fIunits\fP high (where units are either cm or in).
  1083.   .TP
  1084.   \fB-tr\fP
  1085.   Turn on cursor (mouse) tracking arrows.
  1086. ***************
  1087. *** 95,100
  1088.   .TP
  1089.   \fB-no\fP
  1090.   Turn off cursor (mouse) tracking arrows.
  1091.   .SH "GRAPHICAL OBJECTS"
  1092.   The objects in \fIxfig\fP are divided into \fBprimitive objects\fP and
  1093.   \fBcompound object\fP. The primitive objects are: \fIARC\fP, \fICIRCLE\fP,
  1094.  
  1095. --- 99,116 -----
  1096.   .TP
  1097.   \fB-no\fP
  1098.   Turn off cursor (mouse) tracking arrows.
  1099. + .TP
  1100. + \fB-inc\fP
  1101. + Make inches the unit of choice (default).
  1102. + .TP
  1103. + \fB-me\fP
  1104. + Make centimeters the unit of choice.
  1105. + .TP
  1106. + \fB-inv\fP
  1107. + Use inverse video (white on black).
  1108. + .TP
  1109. + \fB-de\fP
  1110. + Turn on debugging mode.
  1111.   .SH "GRAPHICAL OBJECTS"
  1112.   The objects in \fIxfig\fP are divided into \fBprimitive objects\fP and
  1113.   \fBcompound object\fP. The primitive objects are: \fIARC\fP, \fICIRCLE\fP,
  1114. ***************
  1115. *** 381,389
  1116.   The overall widget name(Class) is xfig.fig(Fig.TopLevelShell).  This
  1117.   set of resources correspond to the command line arguments:
  1118.   .TP 1.25i
  1119. - trackCursor
  1120. - (boolean:on) -track and -notrack arguments
  1121. - .TP
  1122.   justify
  1123.   (boolean:false) -right and -left arguments
  1124.   .TP
  1125.  
  1126. --- 397,402 -----
  1127.   The overall widget name(Class) is xfig.fig(Fig.TopLevelShell).  This
  1128.   set of resources correspond to the command line arguments:
  1129.   .TP 1.25i
  1130.   justify
  1131.   (boolean:false) -right and -left arguments
  1132.   .TP
  1133. ***************
  1134. *** 390,398
  1135.   landscape
  1136.   (boolean:false) -Landscape and -Portrait arguments
  1137.   .TP
  1138. - debug
  1139. - (boolean:off) -debug arguments
  1140. - .TP
  1141.   width
  1142.   (integer:7.5 or 10 inches) -width argument
  1143.   .TP
  1144.  
  1145. --- 403,408 -----
  1146.   landscape
  1147.   (boolean:false) -Landscape and -Portrait arguments
  1148.   .TP
  1149.   width
  1150.   (integer:7.5 or 10 inches) -width argument
  1151.   .TP
  1152. ***************
  1153. *** 399,404
  1154.   height
  1155.   (integer:10 or 7.5 inches) -height argument
  1156.   .TP
  1157.   reverseVideo
  1158.   (boolean:off) -inverse argument
  1159.   .PP
  1160.  
  1161. --- 409,420 -----
  1162.   height
  1163.   (integer:10 or 7.5 inches) -height argument
  1164.   .TP
  1165. + trackCursor
  1166. + (boolean:on) -track and -notrack arguments
  1167. + .TP
  1168. + inches
  1169. + (boolean:true) -inches and -metric arguments
  1170. + .TP
  1171.   reverseVideo
  1172.   (boolean:off) -inverse argument
  1173.   .TP
  1174. ***************
  1175. *** 401,406
  1176.   .TP
  1177.   reverseVideo
  1178.   (boolean:off) -inverse argument
  1179.   .PP
  1180.   These arguments correspond to the widgets which make up \fIxfig\fP.
  1181.   .TP 1.5i
  1182.  
  1183. --- 417,425 -----
  1184.   .TP
  1185.   reverseVideo
  1186.   (boolean:off) -inverse argument
  1187. + .TP
  1188. + debug
  1189. + (boolean:off) -debug argument
  1190.   .PP
  1191.   These arguments correspond to the widgets which make up \fIxfig\fP.
  1192.   .TP 1.5i
  1193. -- 
  1194. Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
  1195. Moderator of comp.sources.x
  1196.